package com.winsdom.service;

import lombok.RequiredArgsConstructor;
import org.springframework.mail.MailException;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * @Author: 陈文平
 * @CreateTime: 2025-05-11-18:44
 * @Description:
 * @Version: 1.0
 */

public interface SmsTemplateService {


    /**
     * 获取所有短信模板（处理后的格式）
     * @return 处理后的模板列表
     */
    List<Map<String, Object>> getAllSmsTemplates();

    /**
     * 获取填充后的单个模板信息
     * @param templateKey 模板键
     * @param params 填充参数
     * @return 填充后的模板信息
     */
    Map<String, Object> getSmsTemplateInfo(String templateKey, Map<String, String> params);

    /**
     * 发送包含短信模板的邮件
     * @param toEmail 收件人邮箱
     * @param templateKey 模板键
     * @param params 模板填充参数
     * @throws MailException 邮件发送异常
     */

    void sendTemplateByEmail(String toEmail, String templateKey, Map<String, String> params) throws MailException;


    void sendTemplateByPhone(String phone, String templateKey, Map<String, String> params) throws MailException;


    /**
     * 发送账单通知（通过账单编号）
     * @param billNo
     */
    void sendBillNotification(String billNo);




    /**
     * 发送电子发票通知（通过客户ID）
     * @param customerId
     */
    void sendInvoicingNotification(Long customerId);



    /**
     * 发送催收通知（通过客户ID）
     * @param customerId
     */
    void sendCollectReminder(Long customerId);

    /**
     * 发送电子收据通知（通过客户ID）
     * @param customerId
     */
    void sendIssurReceiptNotification(Long customerId);



    /**
     * 批量发送催收通知（支持多个客户ID）
     * @param customerIds 客户ID列表
     * @return 结果（successIds：成功的客户ID列表；failIds：失败的客户ID列表）
     */
    Map<String,Object> sendCollectReminderMultiple(List<Long> customerIds);


    /**
     * 批量发送账单通知（支持多个账单编号）
     * @param billNos 账单编号列表
     * @return 结果（successIds：成功的客户ID列表；failIds：失败的客户ID列表）
     */
    Map<String,Object> sendBillNotificationMultiple(List<String> billNos);

    /**
     * 根据客户ID查询缴费记录关键信息
     */
    Map<String, Object> getPaymentInfoByCustomerId(Long customerId);

    /**
     * 更新客户催缴通知发送次数（+1）
     * @param customerId 客户ID
     */
    void updateCollectionNoticeTimesAndDate(Long customerId);






}